package com.lib.common.view.explosionview;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;

public class Utils {
	
	private Utils() {
	
	}
	
	private static final float DENSITY = Resources.getSystem().getDisplayMetrics().density;
	private static final Canvas sCanvas = new Canvas();
	
	public static int dp2Px(int dp) {
		
		return Math.round(dp * DENSITY);
	}
	
	public static Bitmap createBitmapFromView(View view) {
		
		if (view instanceof ImageView) {
			Drawable drawable = ((ImageView) view).getDrawable();
			if (drawable != null && drawable instanceof BitmapDrawable) {
				return ((BitmapDrawable) drawable).getBitmap();
			}
		}
		view.clearFocus();
		Bitmap bitmap = createBitmapSafely(view.getWidth(),
			view.getHeight(), Bitmap.Config.ARGB_8888, 1);
		if (bitmap != null) {
			synchronized (sCanvas) {
				Canvas canvas = sCanvas;
				canvas.setBitmap(bitmap);
				view.draw(canvas);
				canvas.setBitmap(null);
			}
		}
		return bitmap;
	}
	
	public static Bitmap createBitmapSafely(int width, int height, Bitmap.Config config, int retryCount) {
		
		try {
			return Bitmap.createBitmap(width, height, config);
		} catch (OutOfMemoryError e) {
			e.printStackTrace();
			if (retryCount > 0) {
				System.gc();
				return createBitmapSafely(width, height, config, retryCount - 1);
			}
			return null;
		}
	}
}
